{"componentChunkName":"component---src-templates-blog-page-index-tsx","path":"/trabalhando-com-proxy/","result":{"data":{"mdx":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"layout\": \"BlogPage\",\n  \"title\": \"Trabalhando com Proxy\",\n  \"description\": \"Nesse artigo iremos aprender o que é um Proxy e para que ele server na Blockchain, como implantá-lo e suas aplicações.\",\n  \"image\": \"capa.jpg\",\n  \"tags\": [\"Avançado\", \"Aplicações\"],\n  \"author\": [\"Matheus\"],\n  \"publishedAt\": \"07/06/2022\",\n  \"modifiedAt\": \"20220607\",\n  \"suburl\": \"trabalhando-com-proxy/\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Nesse artigo iremos aprender o que \\xE9 um Proxy e para que ele server na Blockchain, como implant\\xE1-lo e suas aplica\\xE7\\xF5es.\"), mdx(\"h2\", {\n    \"id\": \"o-que-é-um-proxy-e-para-que-ele-serve-na-blockchain\"\n  }, \"O que \\xE9 um Proxy e para que ele serve na Blockchain?\"), mdx(\"p\", null, \"Um Proxy, resumidamente, \\xE9 uma ponte entre vers\\xF5es de um contrato implantado na blockchain.\"), mdx(\"p\", null, \"T\\xE1 ok, mas para que serve? O proxy serve para fazer uma atualiza\\xE7\\xE3o de um contrato j\\xE1 implantado, ou seja, mesmo ap\\xF3s implantar seu contrato inteligente,\\nvoc\\xEA poder\\xE1 atualiz\\xE1-lo com novas funcionalidades, corrigir poss\\xEDveis bugs no contrato, alterar l\\xF3gicas j\\xE1 implantadas, resumindo, o proxy \\xE9 como se fosse\\num versionador de c\\xF3digo para os contratos da blockchain.\"), mdx(\"p\", null, \"Se voc\\xEA implantar um novo contrato sem ter implantando um Proxy junto, voc\\xEA n\\xE3o poder\\xE1 realizar atualiza\\xE7\\xF5es, por isso, antes de implementar um contrato, analise\\nse voc\\xEA precisar\\xE1 atualizar o contrato ou ele ser\\xE1 um contrato j\\xE1 100% planejado e est\\xE1tico, sem necessidade de altera\\xE7\\xF5es.\"), mdx(\"h2\", {\n    \"id\": \"exemplo-de-proxy-básico-minimalproxy\"\n  }, \"Exemplo de Proxy b\\xE1sico (MinimalProxy)\"), mdx(\"p\", null, \"Se voc\\xEA tiver um contrato que ser\\xE1 implantado v\\xE1rias vezes, use o contrato de proxy m\\xEDnimo para implant\\xE1-los de forma econ\\xF4mica.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\n// C\\xF3digo original\\n// https://github.com/optionality/clone-factory/blob/master/contracts/CloneFactory.sol\\n\\ncontract MinimalProxy {\\n    function clone(address target) external returns (address result) {\\n        // converte o endere\\xE7o para 20 bytes\\n        bytes20 targetBytes = bytes20(target);\\n\\n        // c\\xF3digo atual //\\n        // 3d602d80600a3d3981f3363d3d373d3d3d363d73bebebebebebebebebebebebebebebebebebebebe5af43d82803e903d91602b57fd5bf3\\n\\n        // c\\xF3digo de cria\\xE7\\xE3o //\\n        // copie o c\\xF3digo de tempo de execu\\xE7\\xE3o na mem\\xF3ria e retorne-o\\n        // 3d602d80600a3d3981f3\\n\\n        // c\\xF3digo de tempo de execu\\xE7\\xE3o //\\n        // c\\xF3digo da delegatecall para endere\\xE7o\\n        // 363d3d373d3d3d363d73 address 5af43d82803e903d91602b57fd5bf3\\n\\n        assembly {\\n            /*\\n            l\\xEA os 32 bytes de mem\\xF3ria come\\xE7ando no ponteiro armazenado em 0x40\\n\\n            Em solidity, o slot 0x40 na mem\\xF3ria \\xE9 especial: cont\\xE9m o \\\"ponteiro de mem\\xF3ria livre\\\"\\n            que aponta para o final da mem\\xF3ria atualmente alocada.\\n            */\\n            let clone := mload(0x40)\\n            // armazenar 32 bytes na mem\\xF3ria come\\xE7ando em \\\"clone\\\"\\n            mstore(\\n                clone,\\n                0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000\\n            )\\n\\n            /*\\n              |              20 bytes                |\\n            0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000\\n                                                      ^\\n                                                      ponteiro\\n            */\\n            // armazenar 32 bytes na mem\\xF3ria come\\xE7ando em \\\"clone\\\" + 20 bytes\\n            // 0x14 = 20\\n            mstore(add(clone, 0x14), targetBytes)\\n\\n            /*\\n              |               20 bytes               |                 20 bytes              |\\n            0x3d602d80600a3d3981f3363d3d373d3d3d363d73bebebebebebebebebebebebebebebebebebebebe\\n                                                                                              ^\\n                                                                                              ponteiro\\n            */\\n            // armazenar 32 bytes na mem\\xF3ria come\\xE7ando em \\\"clone\\\" + 40 bytes\\n            // 0x28 = 40\\n            mstore(\\n                add(clone, 0x28),\\n                0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000\\n            )\\n\\n            /*\\n              |               20 bytes               |                 20 bytes              |           15 bytes          |\\n            0x3d602d80600a3d3981f3363d3d373d3d3d363d73bebebebebebebebebebebebebebebebebebebebe5af43d82803e903d91602b57fd5bf3\\n            */\\n            // criar novo contrato\\n            // enviar 0 Ether\\n            // o c\\xF3digo come\\xE7a no ponteiro armazenado em \\\"clone\\\"\\n            // tamanho do c\\xF3digo 0x37 (55 bytes)\\n            result := create(0, clone, 0x37)\\n        }\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"h2\", {\n    \"id\": \"exemplo-de-proxy-atualizável-upgradeable-proxy\"\n  }, \"Exemplo de Proxy atualiz\\xE1vel (Upgradeable Proxy)\"), mdx(\"p\", null, \"Exemplo de contrato de proxy atualiz\\xE1vel. Nunca use isso em produ\\xE7\\xE3o, pois voc\\xEA deve desenvolver seu pr\\xF3prio Proxy.\"), mdx(\"p\", null, \"Este exemplo mostra como usar \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"delegatecalle\"), \" para retornar dados quando \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"fallback\"), \" \\xE9 chamado.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\ncontract Proxy {\\n    address public implementation;\\n\\n    function setImplementation(address _imp) external {\\n        implementation = _imp;\\n    }\\n\\n    function _delegate(address _imp) internal virtual {\\n        assembly {\\n            // calldatacopy(t, f, s)\\n            // copiar s bytes de calldata na posi\\xE7\\xE3o f para mem na posi\\xE7\\xE3o t\\n            calldatacopy(0, 0, calldatasize())\\n\\n            // delegatecall(g, a, in, insize, out, outsize)\\n            // - chama o contrato no endere\\xE7o a\\n            // - com entrada mem[in\\u2026(in+insize))\\n            // - fornecendo gas g\\n            // - e retorna mem[out\\u2026(out+outsize))\\n            // - retornando 0 em caso de erro e 1 em caso de sucesso\\n            let result := delegatecall(gas(), _imp, 0, calldatasize(), 0, 0)\\n\\n            // returndatacopy(t, f, s)\\n            // copia s bytes de returndata na posi\\xE7\\xE3o f para mem na posi\\xE7\\xE3o t\\n            returndatacopy(0, 0, returndatasize())\\n\\n            switch result\\n            case 0 {\\n                // revert(p, s)\\n                // terminar a execu\\xE7\\xE3o, reverte as altera\\xE7\\xF5es de estado, return data mem[p\\u2026(p+s))\\n                revert(0, returndatasize())\\n            }\\n            default {\\n                // return(p, s)\\n                // fim da execu\\xE7\\xE3o, return data mem[p\\u2026(p+s))\\n                return(0, returndatasize())\\n            }\\n        }\\n    }\\n\\n    fallback() external payable {\\n        _delegate(implementation);\\n    }\\n}\\n\\n// Primeira vers\\xE3o do contrato\\ncontract V1 {\\n    address public implementation;\\n    uint public x;\\n\\n    function inc() external {\\n        x += 1;\\n    }\\n}\\n\\n// Segunda vers\\xE3o do contrato\\ncontract V2 {\\n    address public implementation;\\n    uint public x;\\n\\n    function inc() external {\\n        x += 1;\\n    }\\n\\n    function dec() external {\\n        x -= 1;\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"h3\", {\n    \"id\": \"testar-no-remix\"\n  }, \"Testar no \", mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"https://remix.ethereum.org/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Remix\")), mdx(\"br\", null), mdx(\"br\", null));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"Trabalhando com Proxy","description":"Nesse artigo iremos aprender o que é um Proxy e para que ele server na Blockchain, como implantá-lo e suas aplicações.","image":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAQBAgP/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAFxjYJLB//EABoQAAICAwAAAAAAAAAAAAAAAAECERIEECH/2gAIAQEAAQUCUxkPcKs1Kie6/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAHBABAAICAwEAAAAAAAAAAAAAAQARAlEDEDES/9oACAEBAAY/AkeRcsro1FLydQv2fQF7nvX/xAAbEAACAwADAAAAAAAAAAAAAAABEQAhMRBB0f/aAAgBAQABPyFlII4EJMjpThEQUliUIHqXNeOP/9oADAMBAAIAAwAAABDQz//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8QP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8QP//EAB8QAQEAAgAHAQAAAAAAAAAAAAERACEQMUFRYYGR0f/aAAgBAQABPxAavgac0J0fzzkO9pNfWMQYKSj61g3oMBo7XAOxS8uD/9k=","aspectRatio":1.5151515151515151,"src":"/static/0652b3c036a43265007cd870742a3fc1/0cb3d/capa.jpg","srcSet":"/static/0652b3c036a43265007cd870742a3fc1/f836f/capa.jpg 200w,\n/static/0652b3c036a43265007cd870742a3fc1/2244e/capa.jpg 400w,\n/static/0652b3c036a43265007cd870742a3fc1/0cb3d/capa.jpg 536w","sizes":"(max-width: 536px) 100vw, 536px"}}},"tags":["Avançado","Aplicações"],"author":["Matheus"],"suburl":"trabalhando-com-proxy/","publishedAt":"07/06/2022","modifiedAt":"20220607"},"tableOfContents":{"items":[{"url":"#o-que-é-um-proxy-e-para-que-ele-serve-na-blockchain","title":"O que é um Proxy e para que ele serve na Blockchain?"},{"url":"#exemplo-de-proxy-básico-minimalproxy","title":"Exemplo de Proxy básico (MinimalProxy)"},{"url":"#exemplo-de-proxy-atualizável-upgradeable-proxy","title":"Exemplo de Proxy atualizável (Upgradeable Proxy)","items":[{"url":"#testar-no-remix","title":"Testar no Remix"}]}]},"timeToRead":1},"allMdx":{"nodes":[{"frontmatter":{"suburl":"sistema-de-swap-estavel-amm/","title":"Como criar um sistema de Swap estável AMM","tags":["Avançado","DeFi"]}},{"frontmatter":{"suburl":"produto-constante-amm/","title":"Como criar um produto constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"soma-constante-amm/","title":"Como criar uma soma constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-cofre/","title":"Como criar um sistema de Cofre","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-staking/","title":"Como criar um sistema de Staking de Recompensas","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-preco-chainlink-oracle/","title":"Como criar um sistema de preços Oracle","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"exemplos-de-uso-do-uniswap-v3/","title":"Exemplos de uso do Uniswap V3","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"fornecimento-unilateral-com-uniswap-v2/","title":"Fornecimento unilateral ideal com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"adicionar-e-remover-liquidez-com-uniswap-v2/","title":"Como adicionar e remover liquidez com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"swap-com-uniswap-v2/","title":"Como realizar Swap com Uniswap V2","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"testes-com-echidna/","title":"Como realizar testes com Echidna","tags":["Intermediário"]}},{"frontmatter":{"suburl":"ignorar-verificacao-do-tamanho-do-contrato/","title":"Como ignorar a verificação do tamanho do contrato","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"repeticao-de-assinatura/","title":"Repetição de assinatura","tags":["Avançado","Hacks"]}},{"frontmatter":{"suburl":"manipular-timestamp-do-bloco/","title":"Manipulando o timestamp do bloco na blockchain","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-front-running/","title":"Ataque utilizando a técnica front running","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"honeypot/","title":"Criar uma armadilha para hackers com a técnica honeypot","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ocultar-script-malicioso/","title":"Como um contrato malicioso esconde seu script","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"phishing-com-txorigin/","title":"Phishing com tx.origin","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"negacao-de-servico/","title":"Inutilizar um contrato através da negação de serviço","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"fonte-de-aleatoriedade/","title":"Fonte de Aleatoriedade","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"chamada-de-funcao-delegatecall/","title":"Chamada de função delegatecall","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"acessando-variaveis-privadas/","title":"Acessando variáveis privadas","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"auto-destruicao/","title":"Ataques com Auto-destruição","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"estouro-de-memoria/","title":"Ataques com estouro de memória","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-de-reentrada/","title":"Ataque de reentrada, aprenda como funciona e como evitar","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"bloqueio-de-tempo-timelock/","title":"Criar um contrato com bloqueio de tempo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"contrato-para-multichamadas/","title":"Criar contrato para Multichamada de funções","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"financiamento-coletivo-crowd-fund/","title":"Criar um sistema de financiamento coletivo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"sistema-de-leilao-ingles-holandes/","title":"Criar um sistema de leilão inglês e holandês","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-bidirecional/","title":"Criar um Canal de pagamento bidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-unidirecional/","title":"Criar um Canal de pagamento unidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"gravar-dados-no-slot/","title":"Como gravar dados em qualquer slot","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"implantar-contrato-com-proxy/","title":"Como implantar qualquer contrato com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"trabalhando-com-proxy/","title":"Trabalhando com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"precomputar-endereco-contrato/","title":"Pré-computar endereço do Contrato com Create2","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc721/","title":"Criando nosso primeiro Token ERC721","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc20/","title":"Criando nosso primeiro Token ERC20","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-mapeamento-iteravel/","title":"Mapeamento Iterável","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-arvore-merkle/","title":"Árvore de Merkle","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-multi-assinatura/","title":"Carteira com Multi-Assinaturas","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-wallet/","title":"Carteira de Tokens","tags":["Iniciante","Aplicações"]}},{"frontmatter":{"suburl":"assinaturas-e-hashing-keccak/","title":"Verificando assinatura hashing com Keccak256","tags":["Intermediário","Avançado"]}},{"frontmatter":{"suburl":"abi/","title":"O que é ABI e para que serve?","tags":["Iniciante"]}},{"frontmatter":{"suburl":"import-e-libraries/","title":"Import e Libraries, para que servem?","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"criar-contrato-simples/","title":"Criar um contrato através de outro contrato","tags":["Intermediário"]}},{"frontmatter":{"suburl":"call-fallback-delegatecall/","title":"Call, Fallback, Delegatecall e chamadas de contratos","tags":["Intermediário"]}},{"frontmatter":{"suburl":"transfer-send-call/","title":"Enviar Ether com transfer, send e call","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"visibilidade-interface-pagavel/","title":"Visibilidade, Interfaces e Funções Pagáveis","tags":["Intermediário"]}},{"frontmatter":{"suburl":"evento-construtor-heranca/","title":"Evento, Construtor e Herança","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"tratamento-de-erros/","title":"Tratamento de erros de condições e exceções","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"funcoes/","title":"Funções e Modificadores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"armazenamento/","title":"Armazenamento de Dados","tags":["Intermediário"]}},{"frontmatter":{"suburl":"estruturas/","title":"Estruturas - Struct","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"enum/","title":"Enum - Enumeradores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"mapping-arrays/","title":"Mapping e Arrays","tags":["Iniciante"]}},{"frontmatter":{"suburl":"if-else-for-while/","title":"If, Else, For e While","tags":["Iniciante"]}},{"frontmatter":{"suburl":"ether-wei-gas/","title":"Ether, Wei e Taxa de Gas","tags":["Iniciante"]}},{"frontmatter":{"suburl":"variaveis/","title":"Entendendo as Variáveis","tags":["Iniciante"]}},{"frontmatter":{"suburl":"primeiro-aplicativo/","title":"Meu primeiro aplicativo","tags":["Iniciante","Aplicações"]}}]},"topicsYaml":{"topics":[{"desc":"Todos os conteúdos de nível iniciante estão disponíveis aqui","title":"Iniciante","url":"iniciante/"},{"desc":"Todos os conteúdos de nível intermediário estão disponíveis aqui","title":"Intermediário","url":"intermediario/"},{"desc":"Todos os conteúdos de nível avançado estão disponíveis aqui","title":"Avançado","url":"avancado/"},{"desc":"Todos os artigos referentes a exemplos de aplicações do Solidity, estão disponíveis aqui","title":"Aplicações","url":"aplicacoes/"},{"desc":"Todos os artigos referentes a exemplos de aplicação de hacks do Solidity, estão disponíveis aqui","title":"Hacks","url":"hacks/"},{"desc":"Todos os artigos referentes a exemplos de aplicação DeFi do Solidity, estão disponíveis aqui","title":"DeFi","url":"defi/"},{"desc":"Artigos de outras linguagens de programação, exemplos de interação entre a blockchain e aplicativos externos, estão disponíveis aqui","title":"Outros Artigos","url":"artigos/"}]}},"pageContext":{"suburl":"trabalhando-com-proxy/","postTopics":["Avançado","Aplicações"],"publishedAt":"07/06/2022","prevArticle":{"title":"Pré-computar endereço do Contrato com Create2","layout":"BlogPage","suburl":"precomputar-endereco-contrato/","author":["Matheus"],"tags":["Avançado","Aplicações"],"publishedAt":"06/06/2022","modifiedAt":"20220606"},"nextArticle":{"title":"Como implantar qualquer contrato com Proxy","layout":"BlogPage","suburl":"implantar-contrato-com-proxy/","author":["Matheus"],"tags":["Avançado","Aplicações"],"publishedAt":"08/06/2022","modifiedAt":"20220608"}}},"staticQueryHashes":["119291576","2330562257","4065828390"]}